import java_cup.runtime.Symbol;



class Yytoken {
  Yytoken 
    (
     int index,
     String text,
     int line,
     int charBegin,
     int charEnd
     )
      {
	m_index = index;
	m_text = new String(text);
	m_line = line;
	m_charBegin = charBegin;
	m_charEnd = charEnd;
      }

  public int m_index;
  public String m_text;
  public int m_line;
  public int m_charBegin;
  public int m_charEnd;
  public String toString() {
      return m_text;
  }
}

%%
%{
  private int comment_count = 0;
%} 
%line
%char
%eofval{
  return (new Symbol(sym.EOF, new Yytoken(0,yytext(),yyline,yychar,yychar+1)));
%eofval}

ALPHA=[A-Za-z]
DIGIT=[0-9]
ALPHA_NUMERIC={ALPHA}|{DIGIT}
ID={ALPHA}({ALPHA_NUMERIC})*
NUMBER=({DIGIT})*
REAL={DIGIT}*"."{DIGIT}+
WHITE_SPACE=[\f\ \t\b\r\n]

%cup



%% 
"\"" { return (new Symbol(sym.COMILLAS, new Yytoken(0,yytext(),yyline,yychar,yychar+1))); }
";" { return (new Symbol(sym.PUNTCOMA, new Yytoken(0,yytext(),yyline,yychar,yychar+1))); }
"+" { return (new Symbol(sym.MAS, new Yytoken(1,yytext(),yyline,yychar,yychar+1))); }
"-" { return (new Symbol(sym.MENOS, new Yytoken(2,yytext(),yyline,yychar,yychar+1))); }
"*" { return (new Symbol(sym.MULT, new Yytoken(3,yytext(),yyline,yychar,yychar+1))); }
"/" { return (new Symbol(sym.DIVIDE, new Yytoken(4,yytext(),yyline,yychar,yychar+1))); }
"(" { return (new Symbol(sym.PARENTIZQ, new Yytoken(5,yytext(),yyline,yychar,yychar+1))); }
")" { return (new Symbol(sym.PARENTDER, new Yytoken(6,yytext(),yyline,yychar,yychar+1))); }
"=" { return (new Symbol(sym.ASIG, new Yytoken(7,yytext(),yyline,yychar,yychar+1))); }
"==" { return (new Symbol(sym.IGUAL, new Yytoken(9,yytext(),yyline,yychar,yychar+1))); }
"!=" { return (new Symbol(sym.DISTINTO, new Yytoken(10,yytext(),yyline,yychar,yychar+1))); }
"!" { return (new Symbol(sym.NEGACION, new Yytoken(11,yytext(),yyline,yychar,yychar+1))); }
"<" { return (new Symbol(sym.MENOR, new Yytoken(12,yytext(),yyline,yychar,yychar+1))); }
">" { return (new Symbol(sym.MAYOR, new Yytoken(13,yytext(),yyline,yychar,yychar+1))); }
"<=" { return (new Symbol(sym.MENORIGUAL, new Yytoken(14,yytext(),yyline,yychar,yychar+1))); }
">=" { return (new Symbol(sym.MAYORIGUAL, new Yytoken(15,yytext(),yyline,yychar,yychar+1))); }
"&&" { return (new Symbol(sym.AND, new Yytoken(16,yytext(),yyline,yychar,yychar+1))); }
"||" { return (new Symbol(sym.OR, new Yytoken(17,yytext(),yyline,yychar,yychar+1))); }
"{" { return (new Symbol(sym.LLAVEIZQ, new Yytoken(18,yytext(),yyline,yychar,yychar+1))); }
"}" { return (new Symbol(sym.LLAVEDER, new Yytoken(19,yytext(),yyline,yychar,yychar+1))); }
"," { return (new Symbol(sym.COMA, new Yytoken(20,yytext(),yyline,yychar,yychar+1))); }
"[" { return (new Symbol(sym.CORCHETEIZQ, new Yytoken(21,yytext(),yyline,yychar,yychar+1))); }
"]" { return (new Symbol(sym.CORCHETEDER, new Yytoken(22,yytext(),yyline,yychar,yychar+1))); }
"void" { return (new Symbol(sym.VOID, new Yytoken(28,yytext(),yyline,yychar,yychar+1))); }
"int" { return (new Symbol(sym.INT, new Yytoken(30,yytext(),yyline,yychar,yychar+1))); }
"float" { return (new Symbol(sym.FLOAT, new Yytoken(31,yytext(),yyline,yychar,yychar+1))); }
"char" { return (new Symbol(sym.CHAR, new Yytoken(32,yytext(),yyline,yychar,yychar+1))); }
{WHITE_SPACE} { }
"if" { return (new Symbol(sym.IF, new Yytoken(39,yytext(),yyline,yychar,yychar+1))); }
"else" { return (new Symbol(sym.ELSE, new Yytoken(40,yytext(),yyline,yychar,yychar+1))); }
"printf" { return (new Symbol(sym.PRINTF, new Yytoken(40,yytext(),yyline,yychar,yychar+1))); }
"while" { return (new Symbol(sym.WHILE, new Yytoken(42,yytext(),yyline,yychar,yychar+1))); }
{NUMBER} { return (new Symbol(sym.NUMBER, new Yytoken(43,yytext(),yyline,yychar,yychar+1))); }
{ID} { return (new Symbol(sym.ID, new Yytoken(44,yytext(),yyline,yychar,yychar+1))); }



. {System.out.println("Error LEXICO" + yytext()); }